Revert pair constructors back to using is_convertible instead of is_constructible. This should pull things into alignment with the final draft. Fixes http://llvm.org/bugs/show_bug.cgi?id=13063#add_comment. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@158280 91177308-0d34-0410-b5e6-96231b3b80d8 
diff --git a/include/utility b/include/utility index 279d421..a0e16a7 100644 --- a/include/utility +++ b/include/utility 
@@ -233,8 +233,8 @@  _LIBCPP_INLINE_VISIBILITY  pair(const pair<_U1, _U2>& __p  #ifndef _LIBCPP_HAS_NO_ADVANCED_SFINAE - ,typename enable_if<is_constructible<_T1, _U1>::value && - is_constructible<_T2, _U2>::value>::type* = 0 + ,typename enable_if<is_convertible<const _U1&, _T1>::value && + is_convertible<const _U2&, _T2>::value>::type* = 0  #endif  )  : first(__p.first), second(__p.second) {} @@ -261,8 +261,8 @@  #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES    template <class _U1, class _U2, - class = typename enable_if<is_constructible<first_type, _U1 >::value && - is_constructible<second_type, _U2>::value>::type> + class = typename enable_if<is_convertible<_U1, first_type>::value && + is_convertible<_U2, second_type>::value>::type>  _LIBCPP_INLINE_VISIBILITY  pair(_U1&& __u1, _U2&& __u2)  : first(_VSTD::forward<_U1>(__u1)), @@ -272,8 +272,8 @@  template<class _U1, class _U2>  _LIBCPP_INLINE_VISIBILITY  pair(pair<_U1, _U2>&& __p, - typename enable_if<is_constructible<_T1, _U1>::value && - is_constructible<_T2, _U2>::value>::type* = 0) + typename enable_if<is_convertible<_U1, _T1>::value && + is_convertible<_U2, _T2>::value>::type* = 0)  : first(_VSTD::forward<_U1>(__p.first)),  second(_VSTD::forward<_U2>(__p.second)) {}